import axios from 'axios'
import { ElMessage } from 'element-plus'
import router from '@/router'

// 创建axios实例
const instance = axios.create({
    // baseURL 设置为空，使用相对路径，让Vite代理接管
    baseURL: '',
    timeout: 10000,
})

// 请求拦截器 - 不直接引入store，因为可能导致循环依赖
// 在请求时动态获取store中的token
instance.interceptors.request.use(
    (config) => {
        // 尝试从localStorage获取token
        const token = localStorage.getItem('user_token')
        if (token) {
            config.headers['Authorization'] = `Bearer ${token}`
        }
        return config
    },
    (error) => {
        return Promise.reject(error)
    }
)

// 响应拦截器
instance.interceptors.response.use(
    (res) => {
        // 检查返回的数据结构
        if (res.data) {
            return res // 返回整个响应，让调用方处理具体的业务逻辑
        }
        return Promise.reject(res) // 拒绝promise并返回错误数据
    },
    (err) => {
        // 处理HTTP错误
        let message = '请求失败'
        if (err.response) {
            // 服务器返回错误状态码
            const status = err.response.status
            switch (status) {
                case 401:
                    message = '未授权，请重新登录'
                    // 可以在这里处理登出逻辑
                    localStorage.removeItem('user_token')
                    localStorage.removeItem('user_info')
                    // 重定向到登录页
                    router.push('/login')
                    break
                case 403:
                    message = '拒绝访问'
                    break
                case 404:
                    message = '请求的资源不存在'
                    break
                case 500:
                    message = '服务器内部错误'
                    break
                default:
                    message = `请求错误(${status})`
            }
        } else if (err.request) {
            // 请求发出但没有收到响应
            message = '网络错误，服务器没有响应'
        }
        
        console.error('请求错误:', message, err)
        return Promise.reject(err) // 拒绝promise并返回错误
    }
)

export default instance